package A0419;

import java.util.*;

public class A0419 {

    static class staticDemo{ //静态内部类的demo
        static int n = 3;
        int n1 = 4; //属于成员的
//        System.out.println(staticDemo.n);
//        System.out.println(staticDemo.n1);
    }
    class Demo{
        int n = 1;
        void foo(){
            System.out.println("这里是成员内部类的非静态方法");
        }
        static void bar(){
            System.out.println("这里是成员内部类的静态方法");
        }
    }


    public void fun(){
        int a = 1;//a叫做局部变量
        class Demo1{//局部内部类
            int n = 2;
        }
        Demo1 b = new Demo1();//b是对象
        System.out.println(b.n);//A0419.A0419$1Demo1@34a245ab 在内存中的定义
    }
    public static void main(String[] args) {
        List<Integer> list = new LinkedList<Integer>();//去看链表的源码
        List<Integer> list1 = new LinkedList<>();
        //迭代器 遍历容器的工具
//        int[] arr = new int[10];
        for (int i = 0; i < 10; i++) {
            list.add(i);
            list1.add(10-i);
        }

        //需要对list做从大到小的排序，可以借助匿名内部类
        Collections.sort(list,new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);//从大到小排序的固定写法
            }
        });

        Iterator<Integer> iterator = list.iterator();//Iterator是迭代器类
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        } //对于链表中的迭代器，就是典型的成员内部类设计
        A0419 a = new A0419(); //a是A0419目前唯一的实例
        A0419.Demo demo = a.new Demo();//构造成员内部类实例的写法
        demo.foo();
        System.out.println(demo.n);
        Demo.bar();//调用成员内部类的静态方法
        A0419.Demo.bar();//调用成员内部类的静态方法
        a.fun();

        System.out.println(staticDemo.n);
        System.out.println(new staticDemo().n1);//非静态变量只能通过实例去调用new staticDemo()
//        内存池、数据库连接池 享元模式
    }
}
